package com.ys.day30.p4XML解析与配置;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * 描述:
 *
 * @author CodeYang
 * @version 2021/1/14 16:57
 */
public class P3XML解析2 {



    public static void main(String[] args) {


    }
}

/**
 *  citys.xml 解析工具类
 */
final class CityUtils{

    private  CityUtils(){

    }

    /**
     *  创建dom树 用来解析 xml
     */
    private static Document document ;

    /**
     *  创建Map 集合存储xml节点数据  LinkedHashMap 链表+hash表
     */
    private static HashMap<String,Citys> citysHashMap = new LinkedHashMap<>(128);

    static {
        try(
                InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("citys.xml")
        )
         {
             SAXReader saxReader = new SAXReader();
             document = saxReader.read(inputStream);
             // document -> map
             loadMap();

         }catch(Exception e){
            System.out.println("xml 加载失败");
            e.printStackTrace();
        }
    }

    /**
     *  把Document 加载 到map集合中
     */
    private static void loadMap() {
        // 1 得到 root节点
        Element rootElement = document.getRootElement();
        // 获得所有的子节点
        List<Element> elements = rootElement.elements();
        for (Element element : elements) {
            // 获取每个bean的id值作为key
            String id = element.attributeValue("id");
            // 获取单前bean下面的子节点内容值
            Element name = element.element("name");
            Element desc = element.element("desc");
            // 获取文本内容值 转型存档到map
            String nameText = name.getText();
            String descText = desc.getText();
            // put
            citysHashMap.put(id,new Citys(nameText,descText));
        }
    }
}
